package cn.baiweigang.uu.model;

import cn.baiweigang.uu.enums.StrategyStatusEnum;
import cn.baiweigang.uu.strategy.linearswap.KLineList;
import lombok.Data;

import java.math.BigDecimal;
import java.util.List;

/**
 * 策略变化历史记录
 */
@Data
public class StrategyInfo {
    public StrategyInfo() {
    }

    public StrategyInfo(StrategyStatusEnum currentStrategyStatus, String dateTime) {
        this.dateTime = dateTime;
        this.currentStrategyStatus = currentStrategyStatus;
    }

    //通用
    private AccountInfo accountInfo;//账号信息
    private String name;//策略名称
    private String dateTime;//状态变化时间 Str格式
    private long dateTimeTs;//最近一次状态变化时间戳
    private String memo;//备注、说明
    private StrategyStatusEnum currentStrategyStatus;//当前状态
    private StrategyStatusEnum preStrategyStatus;//前一个状态
    private List<StrategyInfo> strategyHistory;//策略状态变化历史记录

    private int positionMaxMinutes;//持仓最大分钟数

    //USDT永续合约专用
    private TradeInfo openOrder;//开仓订单信息
    private TradeInfo closeOrder; //平仓订单信息
    private String forceCloseMemo;//强平说明
    private SummarySheetInfo summarySheetInfo;//当天订单汇总信息
    private double tpslVolume;//当前盈亏点数
    private double slPriceCurrentVolume;//如果触发止损价 将要盈亏的点数
    private int upScore;//上升趋势分数
    private int downScore;//下降趋势分数
    private int openScore;//开仓分数
    private long orderDealTs;//开仓单成交时间 时间戳ms
    private long allowNextOpenTs;//允许的开仓时间 时间戳ms
    private int waitOpenMaxMinutes;//等待订单成交的 最大分钟数
    private int closeAndOpenMinutes;//平仓后 下次开仓时间在xx分钟后
    private KLineInfo kLineInfo;//当前报价
    private KLineList kLineList;//一组K线图
    private int tp;//开仓下单时 设置的止盈点数
    private int sl;//开仓下单时 设置的止损点数
    private int[][] tpN;//盈利配置 xx分钟后 盈利>=xx点 并且反向趋势分>=xx
    private int[][] slN;//亏损配置 xx分钟后 盈利>=xx点 并且反向趋势分>=xx
    private int[][] tpIfslN;//xx分钟后 曾亏损大于xx 目前盈利>=xx点 立即平仓
    private int[][] slDynamic;//xx分钟后 动态止损配置
    //风险配置
    private int changeMaxVolume;//5分钟内最大变化点数 触发强平 1000点
    private int day1SlMaxVolume;//当天允许最大亏损点数 如果达到后，当天暂停开仓并报警

    // 交割合约专用
    private BasisInfo openBasis;//开仓时 基差信息
    private BasisInfo closeBasis;//平仓时 基差信息
    private BasisInfo lastBasis;//最新基差

    private TradeInfo futureOpen;//交割合约开仓单
    private TradeInfo futureCLose;//交割合约平仓单
    private BigDecimal futureTpsl;//交割合约盈亏点数

    private TradeInfo swapOpen;//币本位永续合约开仓单
    private TradeInfo swapClose;//币本位永续合约平仓单
    private BigDecimal swapTpsl;//币本位永续合约盈亏点数

    private PositionInfo futurePosition;//交割合约持仓信息
    private PositionInfo swapPosition;//币本位合约持仓信息

    private AccountInfo futureAccount;//交割合约账号信息
    private AccountInfo swapAccount;//币本位合约账号信息

    private BigDecimal maxBasis;//持仓期间最大基差
    private BigDecimal minBasis;//持仓期间最小基差

    private int futureVolume; //交割合约张数
    private int swapVolume; //币本位永续合约张数


}
